/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package trunk.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Class Groupe 
 * 
 * Groupe de forme géométrique
 * 
 * @author LEFEVRE Michael
 * @author THOUE Jonathan
 */
public class Groupe extends ElementGeo implements Serializable{
    
    private List<ElementGeo> elements;
    
    /**
     * Constructeur par defaut de Rectangle
     */
    public Groupe(){
        elements = new ArrayList<ElementGeo>();
    }
    /**
     *Get liste des elements géométriques
     *@return La liste des elements géométriques
     */
    public List<ElementGeo> getElements() {
        return elements;
    }
    /**
     *Set liste des elements géométriques
     *@param elements - La liste des elements géométriques
     */
    public void setElements(List<ElementGeo> elements) {
        this.elements = elements;
    }

    /**
     * Creer un clone
     * @return clone
     */
    @Override
    public ElementGeo createClone() {
        return new Groupe();
    }
    /**
     * Creer la symetrie
     * @return la symetrie de l'element
     */
    @Override
    ElementGeo createSymetrie() {
        return new Groupe();
    }
    /**
     * isPointOver vérifie si un point est contenu dans la forme géométrique
     *@param click - point
     *@param marge - marge d'erreur
     */
    @Override
    public boolean isPointOver(Point click, int marge) {
        boolean result=false;
        for (ElementGeo elementGeo : elements) {
            if(elementGeo.isPointOver(click, marge))
                result=true;
        }
        return result;
    }
    /**
     * translateTo déplace la forme géométrique
     *@param diffX - déplacement en X
     *@param diffY - déplacement en Y
     */
    @Override
    public void translateTo(int diffX, int diffY) {
        for (ElementGeo elementGeo : elements) {
            elementGeo.translateTo(diffX, diffY);
        }
    }
    /**
     * Fait la symetrie par rapport à l'origine
     * @param o - origine
     */
     @Override
    public void symetrieO(Point o){
        for (ElementGeo elementGeo : elements) {
            elementGeo.symetrieO(o);
        }
    } 
    /**
     * Fait la symetrie par rapport à X
     * @param o - origine
     */
    @Override
    public void symetrieX(Point o){
        for (ElementGeo elementGeo : elements) {
            elementGeo.symetrieX(o);
        }
    }
    /**
     * Fait la symetrie par rapport à Y
     * @param o - origine
     */
    @Override
    public void symetrieY(Point o){
        for (ElementGeo elementGeo : elements) {
            elementGeo.symetrieY(o);
        }
    }
    /**
     * Set La selection dans les composants
     * @param selected - est selectionné
     */
    @Override
    public void setSelected(boolean selected) {
        this.selected=selected;
        for (ElementGeo elementGeo : elements) {
            elementGeo.setSelected(selected);
        }

    }
    
    
}
